package com.hitqz.robot.camera.netty;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class NetworkServiceThreadPool {


    //用于管理网络服务的线程池
    public static final ThreadPoolExecutor networkExecutor = new ThreadPoolExecutor(
            5,               // 核心线程数
            10,              // 最大线程数
            60L,             // 非核心线程存活时间
            TimeUnit.SECONDS, // 时间单位
            new LinkedBlockingQueue<>(50),  // 阻塞队列
            Executors.defaultThreadFactory(), // 默认的线程工厂
            new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略：提交任务的线程执行任务
    );

    // 用于处理消息的线程池
    public static final ThreadPoolExecutor messageExecutor = new ThreadPoolExecutor(
            25,               // 核心线程数
            50,              // 最大线程数
            1L,      // 非核心线程存活时间
            TimeUnit.SECONDS,
            new LinkedBlockingQueue<>(30),  // 阻塞队列
            Executors.defaultThreadFactory(), // 默认的线程工厂
            new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略：提交任务的线程执行任务
    );


    // 用于处理事件的线程池
    public static final ThreadPoolExecutor eventExecutor = new ThreadPoolExecutor(
            10,               // 核心线程数
            50,              // 最大线程数
            1L,      // 非核心线程存活时间
            TimeUnit.SECONDS,
            new LinkedBlockingQueue<>(30),  // 阻塞队列
            Executors.defaultThreadFactory(), // 默认的线程工厂
            new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略：提交任务的线程执行任务
    );




    public static void creatNetworkServerOrClient(Runnable task) {
        networkExecutor.execute(task);
    }

    /**
     * 解析或者分发消息（不耗时的操作）
     * @param task
     */
    public static void dealMessage(Runnable task) {
        messageExecutor.execute(task);
    }

    public static void dealEvent(Runnable task) {
        eventExecutor.execute(task);
    }

}
